﻿

function Upload() {

    var _file_html = '<input name = "{id}" type="file" id="{id}" style="display: none;" />';
    var _obj = null;

    this._url = ""; //要提交的url
    this._ctrl = ""; //点击的控件
    this._ext = ""; //后缀限制

    /*
    callBefore:选择好文件后  发送服务器前执行的函数  判断文件后缀等操作在此执行
    callBack:文件上传完成后回调函数
    */
    this.bind = function (callBefore, callBack, callError) {
        _obj = this;

        //生产file的Id
        var _ctrl_id = "_file" + Math.round(Math.random() * 100000);

        //添加file控件代码
        $($(this._ctrl).parent()).prepend(_file_html.replace(/{id}/g, _ctrl_id));

        //绑定点击事件
        $(this._ctrl).bind("click", function () {
            return $("#" + _ctrl_id).click();
        });

        //file选择好文件后执行
        $("#" + _ctrl_id).change(function () {

            //获取选择的文件名
            var file_val = $("#" + _ctrl_id).val();
            if (file_val.length == 0) {
                return;
            }
            else {
                //在这里对格式判断
                if (_obj._ext.length != 0) {
                    var ext = /\.[^\.]+$/.exec(file_val);
                    ext = (ext + "").toLocaleLowerCase();

                    //判断后缀
                    if (_obj._ext.indexOf(ext) == -1) {
                        if (callError) {
                            callError("格式不正确,支持的格式有" + _obj._ext);
                            return;
                        }
                    }
                }
            }

            if (callBefore) {
                if (!callBefore(file_val)) {
                    return;
                }
            }

            //form表单
            var form = null;

            //获取上级
            var p = $(this).parent();

            //一直循环该标签的上级标签  直到找到form标签为止
            while (true) {
                if (p.length == 0) {
                    alert("没有form表单可提交");
                    return;
                }

                if (p[0].tagName == "FORM") {
                    break;
                }

                p = p.parent();
            }

            form = p;

            //选择好文件后提交表单
            $(form).ajaxSubmit({
                type: 'post',
                url: _obj._url,
                success: function (data) {

                    $("#" + _ctrl_id).val("");
                    if (callBack) {

                        //函数回调
                        callBack(data);
                    }
                },
                error: function (XmlHttpRequest, textStatus, errorThrown) {
                    $("#" + _ctrl_id).val("");
                    if (callError) {
                        callError("上传失败");
                    }
                }
            });

        });
    }
}











